내 작은 .gitconfig
인생의 많은 시간을 깃 커맨드를 입력하면서 살게 되는데, 커맨드 한번에 10글자(git commit)씩 쓰다보면 시간이 참 빠르게 흘러간다는 생각이 듭니다.
그래서 본 블로그에서 설명할 설정을 알고 난 후로 이러한 답답함이 좀 해소되었습니다. 이러한 고민이 있으신분은 .gitconfig
한번씩 설정합시다.
.gitconfig
파일이름 그대로 깃의 설정입니다. 여기서 생각보다 많은 걸 할 수 있습니다. vi ~/.gitconfig
로 자신의 설정을 확인하실 수 있습니다.
[user] name = tolluset email = [email protected] [filter "lfs"] clean = git-lfs clean -- %f smudge = git-lfs smudge -- %f process = git-lfs filter-process required = true [credential] helper = osxkeychain [alias] s = status a = add au = add -u aup = add -u -p ap = add -p anp = !git add -N . && git add -p b = branch c = commit ca = commit --amend cm = commit -m d = diff ds = diff --staged l = log lm = log --merges la = log --all cob = checkout -b co = checkout com = checkout main rb = rebase sbu = submodule update --init sbur = submodule update --remote sbui = submodule update --init rs = restore rss = restore --staged ig = "!gi() { curl -L -s https://www.gitignore.io/api/$@ ;}; gi" fa = fetch --all fp = !git fetch --all -p && git pull -p pp = pull -p rv = remote -v rao = remote add origin pn = !git branch | grep -v \\* | egrep -v 'master|main' | xargs git branch -D ac = !git add . && git commit -am st = stash stpo = stash pop stpu = stash push stc = stash clear psoh = push origin HEAD diff-image = "!f() { cd -- \"${GIT_PREFIX:-.}\"; GIT_DIFF_IMAGE_ENABLED=1 git diff \"$@\"; }; f" [commit] template = ~/.gitmessage.md [pull] rebase = false [core] attributesfile = ~/.gitattributes command = ~/git-diff-image/git_diff_image [init] defaultBranch = main
제 .gitconfig
입니다. [alias]
밑으로 이것저것 많습니다. 설정해놓은 것들을 다 쓰지는 않고 주로 쓰는 것만 따로 정리해보겠습니다.
s = status a = add b = branch c = commit ca = commit --amend cm = commit -m d = diff ds = diff --staged l = log cob = checkout -b co = checkout rb = rebase rs = restore rss = restore --staged fa = fetch --all fp = !git fetch --all -p && git pull -p pn = !git branch | grep -v \\* | egrep -v 'master|main' | xargs git branch -D st = stash psoh = push origin HEAD
위에 커맨드가 주로 사용되네요. 하단에 fp
, pn
요런 alias는 여러가지의 커맨드를 섞는 경우 !
느낌표를 붙여줍니다. 대체 이런걸 어떻게 알 수 있는걸까요? 보통은 문서에 있습니다.
https://git-scm.com/docs/git-config#Documentation/git-config.txt-alias
fp
같은 경우 오랜만에 해당 레포지토리에 진입했을 때 자주 사용하게 됩니다. 전부 패치해주고 pull 해서 브랜치도 최신으로 맞춰주는데 -p
옵션으로 prune 효과를 줄 수 있습니다.
https://git-scm.com/docs/git-pull#Documentation/git-pull.txt---prune
그럼 pn
은 뭘까요. 요건 제가 로컬에 브랜치가 잔뜩 쌓이는게 싫어서 추가한 커맨드입니다. master, main
브랜치와 현재 사용중인 브랜치 이외에 전부 지워버립니다.
마지막으로 마무리에 사용하는 psoh
입니다. 작업을 마치고 리모트에 푸쉬하고 싶을 때 g psoh
같이 쓸 수 있습니다.
방금 왜 git
말고 g
을 쓴걸까요. bash
혹은 zsh
, fish
같은 쉘에서도 alias
를 설정할 수 있습니다. 예를 들어 zsh
를 사용하면 아래와 같이 하시면 됩니다.
echo alias g=\"git\" >> ~/.zshrc source ~/.zshrc
사실 여기서 직접 alias gs="git status"
처럼 설정하시면 스페이스 한칸이 줄게 됩니다. 하지만, 저는 git 말고도 alias로 이것저것 쓰고 있기 때문에 통일성을 위해서 git에 대한 alias는 .gitconfig
에 설정했습니다.
마무리
여러 컴퓨터를 쓰는 경우 위 설정도 동일하게 사용하고 싶게 되는데, 그래서 저는 gist에 파일을 올려두었습니다.
https://gist.github.com/Tolluset/6a17de662372e3860a50f34ca9601d1a
Mac이시면 아래 커맨드로 클립보드에 복사할 수 있으니 gist 만들고 바로 붙여버리시면 됩니다.
# 다른 쉘이면 다른 쉘파일 사용, pbcopy는 클립보드에 복사하는 커맨드 cat ~/.zshrc | pbcopy
주의하실 점은 .gitconfig
에 토큰같이 퍼블릭에 올리면 안되는 값이 있나 확인하시고 애매하면 시크릿으로 올리시면 됩니다.
아마 이러한 설정을 공유하는 시스템도 있을 것 같은데 저는 자주 컴퓨터를 바꾸는 환경이 아니라 gist로 관리해도 될 것 같습니다. 자주 바뀌는 환경이면 설정을 다운로드 해서 로컬 .gitconfig
에 로드해주는 스크립트를 짜도 좋을 것 같네요. ??️